//从storage里读取shiptype
var shiptypelist
shiptypelist = window.localStorage.getItem("shiptypelist")
if(shiptypelist){
  Project_ParamConfig.ShipTypeList= JSON.parse(shiptypelist)
}
//地图对象
var map = new L.Map('map', {
    center: new L.latLng([24, 106]),
    zoom: 4,
    minZoom: 2,
    maxZoom: 18,
    crs: L.CRS.EPSG3395,
    zoomControl: true,
    attributionControl: false,
    closePopupOnClick: false,
    doubleClickZoom: false
});

//底图图层
if(Project_ParamConfig.IsUseNetWorkCharMap) {
    var baseLayer = new L.tileLayer.ChartLayer2("http://m2.shipxy.com/tile.c?l=Na&m=o&z={z}&y={y}&x={x}", {
        id: Project_ParamConfig.baseLayer.id
    });
} else {
    var baseLayer = new L.tileLayer.ChartLayer(Project_ParamConfig.ChartLayerUrl, {
        id: Project_ParamConfig.baseLayer.id
    });
}
map.addLayer(baseLayer);

//目标类
var Target = function () {
    try {
        var url = decodeURIComponent(window.location.href);
    } catch(e) {
        console.error(e);
        return;
    }
    this._data = this.parseQueryString(url) || {};
    this.config = Project_ParamConfig.RealTargetConfig;
    this.isAjaxComplete = 0;
    this.map = map;
};

Target.prototype = {

    constructor: Target,

    start: function () {
        this._marker = this.createMarker();
        if(this._marker) {
            this.map.addLayer(this._marker);
            this.map.setView(this._marker.getLatLng(), this._data.zoom);
            this.map.panBy([0, -60]);
            this.updateMarker();
        }
    },

    createMarker: function () {
        var obj = this._data;
        var latlng = L.latLng(obj.lat, obj.lon),
            tiptext = obj.shipname,
            icon = this.getTargetIcon(obj.shiptype);
        var options = {
            icon: icon,
            opacity: 1,
            rotationAngle: obj.dir,
            rotationOrigin: 'center center', //船舶旋转的参考点
            title: tiptext
        };
        return L.marker(latlng, options);
    },

    updateMarker: function () {
        this.getShipInfo();
        window.setInterval(function () {
            if(this.isAjaxComplete === 1) {
                this.getShipInfo();
            }
        }.bind(this), 1000);
    },

    getShipInfo: function () {
        var url = this.config.shipInfoUrl,
            data = {
                shipid: this._data.qid,
                mode: this._data.qmode
            };
        this.isAjaxComplete = 0;
        this._ajax = $.ajax({
            url: url,
            data: data,
            type: 'POST',
            dataType: 'json',
            context: this,
            success: this._ajaxsuccess,
            error: this._ajaxerror
        }).always(function () {
            this.isAjaxComplete = 1;
        }.bind(this));
    },

    _ajaxsuccess: function (res) {
        if(res.state !== 1) {
            return;
        }
        var infoobj = this.convertshipInfoObj(res.msg);
        var latlng = L.latLng(infoobj.lat, infoobj.lon);
        if(this.map.hasLayer(this._marker)) {
            this._marker.setLatLng(latlng);
            this._marker.setRotationAngle(infoobj.dir);
            var info = this.getTargetInfo(infoobj);
            this._marker.unbindTooltip();
            this._marker.bindTooltip(info, this.getTootipOptions());
            // this._marker.openTooltip();
        }
    },

    _ajaxerror: function (error) {},

    getTootipOptions: function () {
        return {
            offset: [0, -10],
            direction: "top",
            permanent: true,
            opacity: 0.7
        };
    },

    getTargetInfo: function (curobj) {
        var lat = this.latlngTodfmStr(curobj.lat, 'lat');
        var lng = this.latlngTodfmStr(curobj.lon, 'lng');
        var time = this.getTimeStrFromUnix(curobj.time);
        var info = "船舶编号：" + curobj.id + "<br>" +
            "船名：" + curobj.shipname + "<br>" +
            "船舶类型：" + curobj.shiptype + "<br>" +
            "经度：" + lat + "<br>" +
            "纬度：" + lng + "<br>" +
            "航向：" + curobj.dir + "°<br>" +
            "船艏向：" + curobj.heading + "°<br>" +
            "时间：" + time + "<br>" +
            "船速：" + curobj.speed + "节<br>" +
            "国家/地区：" + curobj.country + "<br>" +
            "信息类型：" + curobj.type + "<br>" +
            "信息来源：" + curobj.src + "<br>";
        return info;
    },

    getTargetIcon: function (type) {
        var type = type.toString(),
            icon = null;
        // switch(type) {
        // case "货船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_1.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "搜救船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_8.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "油轮":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_2.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "拖船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_3.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "渔船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_4.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "客船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_5.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "军事船":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_6.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // case "其他":
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_7.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        //     break;
        // default:
        //     icon = L.icon({
        //         iconUrl: '../themes/images/shipIcons/target_7.png',
        //         iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
        //         iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
        //     });
        // }
        // return icon;
        for(var i=0;i<Project_ParamConfig.FilterDisplayConfig.staticShipTypeList.length;i++){
          if(i<8){
            if(type == Project_ParamConfig.FilterDisplayConfig.staticShipTypeList[i]){
              icon = 'target_'+(i+1)+'';
              icon = L.icon({
                      iconUrl: '../themes/images/shipIcons/target_'+(i+1)+'.png',
                      iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
                      iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
                  });
              return icon;
            }
            // else{
            //   icon = 'target_8'
            //   return icon;
            // }
          }
          else{
            icon = L.icon({
                    iconUrl: '../themes/images/shipIcons/target_8.png',
                    iconSize: [10, 22], //图标的大小，格式，第一个参数是宽度，第二个参数是高度
                    iconAnchor: [5, 11] //图标显示位置，例如宽度和高度是图标大小的一半，则经纬度的点正好在图标的中心点
                });
            return icon;
          }
        }
    },

    convertshipInfoObj: function (shipobj) {
        var obj = {};
        obj.id = this._data.mode !== 0 ? shipobj.target_id_orig : shipobj.target_id; //目标唯一标识号
        obj.time = shipobj.record_utc_time; //最后更新时间 unix时间戳
        obj.lon = parseFloat(shipobj.longitude / 600000); //经度
        obj.lat = parseFloat(shipobj.latitude / 600000); //纬度
        obj.dir = parseFloat(shipobj.direction / 10).toFixed(1); //航向
        obj.heading = shipobj.heading.toFixed(1); //船艏向
        obj.speed = (shipobj.speed / 10).toFixed(1); //船速（节）
        obj.status = this.getDetialConvertName(shipobj.status, "status"); //状态
        if(parseInt(this._data.mode) === 0) {
            var types = [],
                types2 = [],
                srcs = [];
            shipobj.orig_info_type.forEach(function (v, i, arr) {
                types.push(this.getDetialConvertName(v, "orig_info_type"));
                types2.push(v);
            }.bind(this));
            shipobj.orig_info_source.forEach(function (v, i, arr) {
                srcs.push(this.getDetialConvertName(v, "orig_info_source"));
            }.bind(this));
            obj.type = types.join(',');
            obj.type2 = types2.join("~");
            obj.src = srcs.join(',');
        } else {
            obj.type = this.getDetialConvertName(shipobj.orig_info_type, "orig_info_type"); //信息类型  [融合模式下多个]
            obj.type2 = shipobj.orig_info_type;
            obj.src = this.getDetialConvertName(shipobj.orig_info_source, "orig_info_source"); //信息来源 [融合模式下多个]
        }
        obj.shipname = shipobj.ship_name.replace(/@/g, '') || ''; //船名
        obj.country = shipobj.country_name.replace(/@/g, ''); //国家名
        obj.shiptype = this.getDetialConvertName(shipobj.ship_type, "ship_type"); //船舶类型
        return obj;
    },

    getDetialConvertName: function (code, type) {
        var res = ''
        if(code.toString) code = code.toString()
        if(type == 'ship_type') { // 船舶类型（过滤）
            // switch(code) {
            // case '1':
            //     res = '货船'
            //     break
            // case '2':
            //     res = '搜救船'
            //     break
            // case '3':
            //     res = '油轮'
            //     break
            // case '6':
            //     res = '拖船'
            //     break
            // case '5':
            //     res = '渔船'
            //     break
            // case '7':
            //     res = '客船'
            //     break
            // case '8':
            //     res = '军事船'
            //     break
            // case '9':
            //     res = '渔政执法船'
            //     break
            // case '10':
            //     res = '风效应船'
            //     break
            // case '11':
            //     res = '高速船'
            //     break
            // }
            var shipName = Project_ParamConfig.ShipTypeList[code];
            // if(Project_ParamConfig.FilterDisplayConfig.shipTypeList.indexOf(shipName) !== -1){
                res = shipName;
            // }
            // else {
            //     res = '其他'
            // }
        } else if(type == 'country') { // 国别（过滤）
            /*switch(code) {
            case '中国':
                res = '中国'
                break
            case '美国':
                res = '美国'
                break
            case '英国':
                res = '英国'
                break
            case '法国':
                res = '法国'
                break
            case '俄罗斯':
                res = '俄罗斯'
                break
            default:
                res = '其他'
            }*/
            if(Project_ParamConfig.FilterDisplayConfig.shipFlagList.indexOf(code) !== -1){
                res = code;
            }
            else {
                res = '其他'
            }
        } else if(type == 'hwlx') { // 货物类型
            res = code
        } else if(type == 'status') { // 航行状态
            switch(code) {
            case '0':
                res = '在航（主机推动）'
                break
            case '1':
                res = '锚泊'
                break
            case '2':
                res = '失控'
                break
            case '3':
                res = '操纵受限'
                break
            case '4':
                res = '吃水受限'
                break
            case '5':
                res = '靠泊'
                break
            case '6':
                res = '搁浅'
                break
            case '7':
                res = '捕捞作业'
                break
            case '8':
                res = '靠船帆提供动力'
                break
            default:
                res = ''
            }
        } else if(type == 'fixing_device') { // 电子定位装置
            switch(code) {
            case '-1':
                res1 = '非法'
                break
            case '0':
                res = '默认'
                break
            case '1':
                res = 'GPS'
                break
            case '2':
                res = 'GLONASS'
                break
            case '3':
                res = 'GPS/GLONASS组合'
                break
            case '4':
                res = 'Loran-C'
                break
            case '5':
                res = 'Chayka'
                break
            case '6':
                res = '综合导航系统'
                break
            case '7':
                res = '观测'
                break
            case '8':
                res = '北斗'
                break
            case '9':
            case '10':
            case '11':
            case '12':
            case '13':
            case '14':
                res = '未使用'
                break
            case '15':
                res = '内部GNSS'
                break
            default:
                res = code
            }
        } else if(type == 'commun_state') { // 通信状态
            switch(code) {
            case '0':
                res = ''
                break
            case '1':
                res = 'SOTDMA'
                break
            case '2':
                res = 'ITDMA'
                break
            default:
                res = code
            }
        } else if(type == 'pos_accuracy') { // 船位精度
            switch(code) {
            case '0':
                res = ''
                break
            case '1':
                res = '定位误差大于10米'
                break
            case '2':
                res = '定位误差小于等于10米'
                break
            default:
                res = code
            }
        } else if(type == 'orig_info_source') { // 信息来源
            switch(code) {
            case '1':
                res = '农业部'
                break
            case '2':
                res = '海事局'
                break
            case '3':
                res = '海监'
                break
            case '4':
                res = '星载AIS'
                break
            case '5':
                res = '救捞局'
                break
            case '7':
                res = '保障局'
                break
            case '15':
                res = '综合'
                break
            default:
                res = code
            }
        } else if(type == 'orig_info_type') { // 信息类型
            switch(code) {
            case '1':
                res = 'Argos及海事卫星'
                break
            case '2':
                res = '北斗'
                break
            case '3':
                res = 'AIS静态'
                break
            case '4':
                res = 'AIS动态'
                break
            case '5':
                res = 'LRIT'
                break
            case '7':
                res = '船舶信息'
                break
            case '15':
                res = '综合态势信息'
                break
            default:
                res = code
            }
        }
        return res
    },

    getTimeStrFromUnix: function (time) {
        time = parseInt(time);
        if(isNaN(time)) {
            return "";
        }
        var newDate = new Date(time * 1000);
        // var newDate = new Date(time);
        var year = newDate.getFullYear();
        var month = (newDate.getMonth() + 1) < 10 ? "0" + (newDate.getMonth() + 1) : newDate.getMonth() + 1;
        var day = newDate.getDate() < 10 ? "0" + newDate.getDate() : newDate.getDate();
        var hours = newDate.getHours() < 10 ? "0" + newDate.getHours() : newDate.getHours();
        var minuts = newDate.getMinutes() < 10 ? "0" + newDate.getMinutes() : newDate.getMinutes();
        var seconds = newDate.getSeconds() < 10 ? "0" + newDate.getSeconds() : newDate.getSeconds();
        var ret = year + "-" + month + "-" + day + " " + hours + ":" + minuts + ":" + seconds;
        return ret;
    },

    latlngTodfm: function (val, latlngtype, iskeepCapacity, spointCount) {
        var resobj = [],
            dir;
        newval = parseFloat(val);
        var positiveNum = Math.abs(newval);
        var du = parseInt(positiveNum);
        var fen = parseInt(positiveNum * 60 - du * 60);
        var miao = positiveNum * 60 * 60 - fen * 60 - du * 60 * 60;
        if(typeof spointCount === 'undefined' || spointCount <= 0) { spointCount = 0; }
        // if(spointCount === 0) {
        //     miao = parseInt(miao);
        // } else {
        //     miao = miao.toFixed(spointCount);
        // }

        // 四舍五入
        miao = parseFloat(miao.toFixed(spointCount));
        if(miao >= 60) {
            miao = 0;
            miao = miao.toFixed(spointCount);
            fen += 1;
            if(fen >= 60) {
                fen = 0;
                du += 1;
            }
        }
        if(typeof iskeepCapacity === 'undefined') { iskeepCapacity = true; }
        if(iskeepCapacity) {
            if(latlngtype === 'lng') {
                if(du < 10) du = '00' + du;
                if(du >= 10 && du < 100) du = '0' + du;
            } else {
                if(du < 10) du = '0' + du;
            }
            if(fen < 10) fen = '0' + fen;
            if(miao < 10 && spointCount === 0) miao = '0' + miao;

        }
        if(latlngtype === 'lat') {
            if(newval < 0) dir = '南纬';
            else dir = '北纬';
        }
        if(latlngtype === 'lng') {
            if(newval < 0) dir = '西经';
            else dir = '东经';
        }
        resobj.push(du, fen, miao, dir);
        return resobj;
    },

    latlngTodfmStr: function (val, latlngtype, spointCount) {
        var res = this.latlngTodfm(val, latlngtype, spointCount);
        var str = res[3] + " " + res[0] + "°" + res[1] + "′" + res[2] + "″";
        return str;
    },

    parseQueryString: function (url) {
        var obj = {};
        var keyvalue = [];
        var key = "",
            value = "";
        var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
        for(var i in paraString) {
            if(paraString.hasOwnProperty(i)) {
                keyvalue = paraString[i].split("=");
                key = keyvalue[0];
                value = keyvalue[1];
                obj[key] = value;
            }
        }
        return obj;
    }
};


//调用
$(function () {
    new Target().start();
});
